[t:/]$ 지식_

스택과 CDECL

2009/02/10

스택을 통해서 데이터를 함수와 교환하는 방식 중 하나. 검색하면 많이 나오니 찾아보고 이 정도는 뭔지 찾아볼 수 있어야 중급에서 고급으로 넘어간다.

ARM이나 마이컴에서는 레지스터 몇 개를 스택 대신 바로 쓰기도 한다. 아, 인텔도 fastcall이 있다.

오래전부터 함수 아규먼트는 최소한으로 쓰자는 것이 관례이고, C에서는 구조체 포인터로 고등 언어에서는 레퍼런스로 넘기는 것이 관례이다. 대용량 데이터를 아규먼트로 옮겨다니면 스택 복사 비용이 크다. 가끔 무지막지한 덤핑이 필요한 코드를 보기도 하는데 잠재적 스택 오버 플로 코드인 경우도 있다.

스택 오버를 이용해서 복귀 주소를 가로채거나 변경하는 것은 고전적인 해킹 기법이다.

malloc 대신에 스택에서 바로 약간의 공간을 할당하는 함수들도 있다. 당연히 빠르다. 두 말하면 잔소리지만 bss등 정적 전역 변수 들이 아니면 제로 클리어가 필요하다.





공유하기













[t:/] is not "technology - root". dawnsea, rss